In [ ]:
from pprint import pprint
In [1]:
#imports and initilaize virutal poppy using vrep
from pypot.vrep import from_vrep
from poppy.creatures import PoppyHumanoid
robot = PoppyHumanoid(simulator='vrep')
In [ ]:
#import and initialize physical poppy
from poppy.creatures import PoppyHumanoid
robot = PoppyHumanoid()
In [ ]:
#Rend le robot mou et deconnecte les moteurs
for m in robot.motors:
m.compliant = True
robot.close()
In [ ]:
Activation des deux primitives de sécurités fournies avec la poppy_humanoïde, elle permettent d'eviter les dmages sur les moteurs, notement dus a leur surchauffe.
Ces deux primitives devraient être activées au debut de nimporte quelle utilisation de poppy.
In [ ]:
from poppy_humanoid.primitives.safe import LimitTorque
plimit_torque = LimitTorque(robot)
plimit_torque.start()
In [ ]:
from poppy_humanoid.primitives.safe import TemperatureMonitor
ptemp_monitor = TemperatureMonitor(robot,temp_limit=50, sound="/opt/sounds/ouch.wav")
ptemp_monitor.start()
Le moniteur de temperature fournis est sympa mais si pour une raison ou une autre l'opérateur de Poppy de vois/entend pas l'alerte cela risque de causer des domages irreversible sur les moteurs. Cette version propose de rendre rendre "mou" puis totalement inactif les moteurs qui seraient chaud depuis trop longtemps.
⇒ La classe est définie dans poppy_rate/primitives/safety.py
Remarque : limiter le couple des moteur ne semble pas reelement utile, simplement rendre les moteurs compliant si ce n'est pas deja le cas devrait suffire.
In [ ]:
from poppy_rate.primitives.safety import CustomTemperatureMonitor
robot.attach_primitive(CustomTemperatureMonitor(robot,temp_limit=50, sound="/opt/sounds/ouch.wav"),"temp_monitor")
robot.temp_monitor.start()
Primitive permettant d'afficher un graph de l'évolution des temperature min/max des moteurs de poppy
⇒ La classe est définie dans poppy_rate/primitives/safety.py
In [ ]:
from poppy_rate.primitives.safety import TemperatureLogger
In [ ]:
temp_logger = TemperatureLogger(robot)
temp_logger.start()
In [ ]:
%pylab inline
rcParams['figure.figsize'] = 15, 4
t = linspace(0, 20, len(temp_logger.temp_max))
plot(t, temp_logger.temp_min,'g:')
plot(t, temp_logger.temp_max,'r-')
legend(('min', 'max'))
In [ ]:
import operator
# liste triée par t° de tuples (nom_moteur,t°)
temperatures =sorted ([ (m.name,m.present_temperature) for m in robot.motors ] , key=operator.itemgetter(1),reverse=True)
#affiche le tout
for m,t in temperatures:
print (u"%20s' : %5s°C") % (m,t)
In [ ]:
from poppy_humanoid.primitives.posture import SitPosition
robot.attach_primitive(SitPosition(robot),"sit")
In [ ]:
robot.sit.start()
In [ ]:
robot.sit.stop()
In [ ]:
from poppy_humanoid.primitives.posture import StandPosition
robot.attach_primitive(StandPosition(robot),"stand")
In [ ]:
robot.stand.start()
In [2]:
for p in ['r','l']:
for m in ['%s_elbow_y'%p, '%s_shoulder_y'%p,'%s_arm_z'%p]:
robot.__dict__.get(m).compliant = False
robot.goto_position({'%s_elbow_y'%p:-90, '%s_shoulder_y'%p:-75,'%s_arm_z'%p:0}, 1, wait=True)
for k in range(3):
robot.goto_position({'%s_arm_z'%p:45}, 0.7, wait=True)
robot.goto_position({'%s_arm_z'%p:-45}, 0.7, wait=True)
robot.goto_position({'%s_elbow_y'%p:0, '%s_shoulder_y'%p:0,'%s_arm_z'%p:0}, 3, wait=True)
for m in robot.motors:
m.compliant = True
Fait coucou à la mode Elisabeth II, bras droit puis bras gauche : (repris dans poppy_rate/primitives/behaviour.py ) :
N'a pas l'air de fonctionner dans poppy_vrep mais pourtant fonctionnait bien quand testé sur poppy physique
In [ ]:
arm = {'r':90,'l':-90}
shoulder = {'r':-40,'l':40}
shoulder2 = {'r':-15,'l':15}
for p in ['r','l']:
for m in ['%s_elbow_y'%p, '%s_shoulder_y'%p,'%s_shoulder_x'%p,'%s_arm_z'%p]:
robot.__dict__.get(m).compliant = False
robot.goto_position({'%s_elbow_y'%p:-50, '%s_shoulder_y'%p:-165,'%s_arm_z'%p:arm[p]}, 1.5, wait=True)
for k in range(3):
robot.goto_position({'%s_elbow_y'%p:-30,'%s_shoulder_x'%p:shoulder[p]}, 2, wait=True)
robot.goto_position({'%s_elbow_y'%p:-65,'%s_shoulder_x'%p:0}, 2, wait=True)
robot.goto_position({'%s_elbow_y'%p:0, '%s_shoulder_y'%p:0,'%s_arm_z'%p:0,'%s_shoulder_x'%p:shoulder2[p]}, 2, wait=True)
for m in robot.motors:
m.compliant = True